#include "inmersion.h"

Inmersion::Inmersion()
: _numero(0),
  _inicio( QDateTime() ),
  _duracion(0),
  _profundidadmaxima(0),
  _profundidadmedia(0),
  _sitio( NULL ),
  _intervalosuperficie( qnuint() ),
  _temperaturaaire( qnuint() ),
  _temperaturasuperficie( qnuint() ),
  _temperaturafondo( qnuint() ),
  _volumenbotella( qnuint() ),
  _presioninicial( qnuint() ),
  _presionfinal( qnuint() ),
  _lastre(0),
  _porcentajeo2(0),
  _buddy( NULL ),
  _viaje( NULL ),
  _maxtiempo(0)
{}

Inmersion::Inmersion( Buceador* buceador,
                      quint32 numero,
                      const QDateTime& inicio,
                      quint32 duracion,
                      qreal profundidadmaxima,
                      qreal profundidadmedia,
                      Sitio* sitio,
                      const qnuint& tiemposuperficie,
                      const qnuint& temperaturaaire,
                      const qnuint& temperaturasuperficie,
                      const qnuint& temperaturafondo,
                      const qnuint& volumenbotella,
                      const qnuint& presioninicial,
                      const qnuint& presionfinal,
                      qreal lastre,
                      quint32 porcentajeo2,
                      Buddy* buddy,
                      Viaje* viaje )
: _buceador( buceador ),
  _numero( numero ),
  _inicio( inicio ),
  _duracion( duracion ),
  _profundidadmaxima( profundidadmaxima ),
  _profundidadmedia( profundidadmedia ),
  _sitio( sitio ),
  _intervalosuperficie( tiemposuperficie ),
  _temperaturaaire( temperaturaaire ),
  _temperaturasuperficie( temperaturasuperficie ),
  _temperaturafondo( temperaturafondo ),
  _volumenbotella( volumenbotella ),
  _presioninicial( presioninicial ),
  _presionfinal( presionfinal ),
  _lastre( lastre ),
  _porcentajeo2( porcentajeo2 ),
  _buddy( buddy ),
  _viaje( viaje ),
  _maxtiempo(0)
{}

qnuint Inmersion::presionConsumida()
{
    if( _presioninicial.isNull() || _presionfinal.isNull() ) return qnuint();
    return qnuint( _presioninicial.value() - _presionfinal.value() );
}

qnuint Inmersion::aireConsumida()
{
    if( _presioninicial.isNull() || _presionfinal.isNull() || _volumenbotella.isNull() ) return qnuint();
    return qnuint( (_presioninicial.value()-_presionfinal.value()) * _volumenbotella.value() );
}

qreal Inmersion::mod() const
{
    qreal maxbars = 1.4 / ((qreal)_porcentajeo2/100); // presion en la que la PPO (presión parcial del oxígeno) llega al límite de 1,4
    return( 10 * (maxbars-1) ); // profundidad en la que se llega a la presion en cuestión
}

qnreal Inmersion::consumoAireSuperficie()
{
    if( _presioninicial.isNull() || _presionfinal.isNull() || _volumenbotella.isNull() ) return qnreal();
    return qnreal( (aireConsumida().value() / ((profundidadMedia()+10)/10)) / ((qreal)_duracion/60) );
    /* MEDIAS: volumen pulmón: 6l > aire en pulmón lleno: 25% x 6l = 1,5l > velocidad de respiración: 16 pulmones/min
               consumoAireSuperficie: 16 x 1,5l = 24l/min */
}
